/**
 * V3版本前端API适配脚本
 * 
 * 该文件提供V3版本API的统一封装，将原有的直接axios调用迁移到api.js统一管理。
 * 
 * V3版本主要变化：
 * 1. 定价配置与区域关联分离：V2版本中定价配置直接包含areaId字段，V3版本改为独立的映射表管理
 * 2. 新增必填字段：V3版本定价配置新增name和description字段
 * 3. 支持多区域关联：一个定价配置可以关联多个区域
 * 4. 统一API调用：所有接口调用统一通过api.js管理，不再直接使用axios
 * 
 * @version 3.0.1
 * @since 2025-08-29
 * @author 运费系统团队
 * @requires api.js - 统一API服务
 */

// 导入统一API服务
import { api } from './api.js';

// V3版本API基础配置
const V3_API_BASE = '/api';

/**
 * 定价配置管理API (原strategy-area-pricing)
 */
const PricingConfigAPI = {
    BASE_PATH: `${V3_API_BASE}/pricing-config`,
    
    /**
     * 新增定价配置 (V3版本：删除areaId，新增name和description)
     */
    async add(pricingData) {
        return await api.addPricingConfig(pricingData);
    },
    
    /**
     * 更新定价配置
     */
    async update(pricingData) {
        return await api.updatePricingConfig(pricingData);
    },
    
    /**
     * 删除定价配置
     */
    async delete(id) {
        return await api.deletePricingConfig(id);
    },

    /**
     * 获取定价配置详情
     */
    async getDetail(pricingId) {
        return await api.getPricingConfigDetail(pricingId);
    }
};

/**
 * V3版本：定价区域映射管理API
 */
const PricingAreaMappingAPI = {
    BASE_PATH: `${V3_API_BASE}/pricing-area-mapping`,
    
    /**
     * 批量添加定价区域映射
     */
    async batchAdd(pricingId, areaIds, operator = 'frontend_user') {
        return await api.batchAddPricingAreaMapping(pricingId, areaIds, operator);
    },
    
    /**
     * 批量删除定价区域映射
     */
    async batchDelete(pricingId, areaIds, operator = 'frontend_user') {
        return await api.batchDeletePricingAreaMapping(pricingId, areaIds, operator);
    },
    
    /**
     * 查询定价配置关联的区域
     */
    async getAreasByPricingId(pricingId) {
        return await api.getAreasByPricingId(pricingId);
    },
    
    /**
     * 查询区域关联的定价配置
     */
    async getPricingsByAreaId(areaId) {
        return await api.getPricingsByAreaId(areaId);
    },
    
    /**
     * 重新设置定价配置的区域关联
     */
    async resetAreaMapping(pricingId, areaIds, operator = 'frontend_user') {
        return await api.resetPricingAreaMapping(pricingId, areaIds, operator);
    },
    
    /**
     * 检查定价配置与区域是否已关联
     */
    async checkMapping(pricingId, areaId) {
        return await api.checkPricingAreaMapping(pricingId, areaId);
    }
};

/**
 * 前端Vue组件中的使用示例和高级封装方法
 */
const V3ComponentMethods = {
    /**
     * V3版本：创建定价配置并关联区域
     */
    async createPricingConfigWithAreas(formData) {
        return await api.createPricingConfigWithAreas(formData);
    },
    
    /**
     * V3版本：更新定价配置和区域关联
     */
    async updatePricingConfigWithAreas(formData) {
        return await api.updatePricingConfigWithAreas(formData);
    },
    
    /**
     * V3版本：查询定价配置详情（包含关联的区域）
     */
    async getPricingConfigDetail(pricingId) {
        return await api.getPricingConfigDetailWithAreas(pricingId);
    }
};

/**
 * Vue组件数据结构更新
 */
const V3ComponentData = {
    // 定价配置表单数据结构（V3版本）
    pricingForm: {
        id: null,
        strategyId: null,
        name: '', // V3新增必填字段
        description: '', // V3新增字段
        areaIds: [], // V3版本改为数组，支持多个区域
        firstWeightKg: null,
        firstWeightFee: null,
        additionalWeightKg: null,
        additionalWeightFee: null,
        volumetricWeightRatio: null,
        status: 1,
        operator: 'frontend_user'
    },
    
    // 表单验证规则更新
    pricingFormRules: {
        strategyId: [
            { required: true, message: '请选择策略', trigger: 'change' }
        ],
        name: [ // V3新增验证
            { required: true, message: '请输入定价配置名称', trigger: 'blur' },
            { min: 2, max: 100, message: '长度在 2 到 100 个字符', trigger: 'blur' }
        ],
        firstWeightKg: [
            { required: true, message: '请输入首重重量', trigger: 'blur' },
            { type: 'number', min: 0.0, message: '首重重量不能为负数', trigger: 'blur' }
        ],
        firstWeightFee: [
            { required: true, message: '请输入首重资费', trigger: 'blur' },
            { type: 'number', min: 0, message: '首重资费不能为负数', trigger: 'blur' }
        ],
        additionalWeightKg: [
            { required: true, message: '请输入续重重量', trigger: 'blur' },
            { type: 'number', min: 0.0, message: '续重重量不能为负数', trigger: 'blur' }
        ],
        additionalWeightFee: [
            { required: true, message: '请输入续重资费', trigger: 'blur' },
            { type: 'number', min: 0, message: '续重资费不能为负数', trigger: 'blur' }
        ],
        volumetricWeightRatio: [
            { required: true, message: '请输入抛重比', trigger: 'blur' },
            { type: 'number', min: 0, message: '抛重比不能为负数', trigger: 'blur' }
        ]
    }
};

/**
 * V3版本迁移助手函数
 */
const V3MigrationHelper = {
    /**
     * 将V2版本的数据转换为V3版本格式
     */
    convertV2ToV3(v2Data) {
        return {
            strategyId: v2Data.strategyId,
            name: v2Data.name || `定价配置-${v2Data.id || 'new'}`,
            description: v2Data.description || '从V2版本迁移的定价配置',
            areaIds: v2Data.areaId ? [v2Data.areaId] : [], // V2的单个区域转为V3的区域数组
            firstWeightKg: v2Data.firstWeightKg,
            firstWeightFee: v2Data.firstWeightFee,
            additionalWeightKg: v2Data.additionalWeightKg,
            additionalWeightFee: v2Data.additionalWeightFee,
            volumetricWeightRatio: v2Data.volumetricWeightRatio,
            status: v2Data.status,
            operator: v2Data.operator
        };
    },
    
    /**
     * 检查当前数据是否为V2格式
     */
    isV2Format(data) {
        return data.hasOwnProperty('areaId') && !data.hasOwnProperty('name');
    },
    
    /**
     * 自动转换数据格式
     */
    autoConvert(data) {
        if (this.isV2Format(data)) {
            console.warn('检测到V2格式数据，正在自动转换为V3格式');
            return this.convertV2ToV3(data);
        }
        return data;
    }
};

// 导出API供全局使用
window.V3API = {
    PricingConfig: PricingConfigAPI,
    PricingAreaMapping: PricingAreaMappingAPI,
    ComponentMethods: V3ComponentMethods,
    ComponentData: V3ComponentData,
    MigrationHelper: V3MigrationHelper
};

// 向后兼容：保持原有的导出方式
export {
    PricingConfigAPI,
    PricingAreaMappingAPI,
    V3ComponentMethods,
    V3ComponentData,
    V3MigrationHelper
};

console.log('✅ V3版本前端API适配脚本已加载完成，已统一到api.js管理 🚀');
console.log('📋 V3版本主要变化：');
console.log('   - 定价配置与区域关联分离为独立映射表');
console.log('   - 新增name和description必填字段');
console.log('   - 支持一对多区域关联');
console.log('   - 统一API调用通过api.js管理');
console.log('🔧 使用方式：通过window.V3API或import导入使用');